// Written by Craig'n'Dave
using System;
using System.Collections.Generic;
// Depth first traversal using a graph
namespace ConsoleApp1
{
    class Program
    {
        static List<string> dft(Dictionary<string, List<string>> graph, string current_vertex, List<string> visited)
        {
            visited.Add(current_vertex);
            foreach (var vertex in graph.GetValueOrDefault(current_vertex))
            {
                if (!visited.Contains(vertex))
                {
                    dft(graph, vertex, visited);
                }
            }
            return visited;
        }
        // Main program starts here
        static void Main(string[] args)
        {
            var graph = new Dictionary<string, List<string>>()
            {
                { "A", new List<string>() { "B", "C", "D"} },
                { "B", new List<string>() { "A", "E" } },
                { "C", new List<string>() { "A", "D" } },
                { "D", new List<string>() { "A", "C", "F" } },
                { "E", new List<string>() { "B", "G" } },
                { "F", new List<string>() { "D" } },
                { "G", new List<string>() { "E" } }
            };

            List<string> visited = new List<string>();
            visited = dft(graph, "A", visited);
            Console.WriteLine(string.Join(", ", visited));
        }
    }
}
